home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 6 / The Arsenal Files 6 (Arsenal Computer).ISO / pcboard / ulp_213.zip / ULP.DOC < prev    next >
Text File  |  1996-02-11  |  76KB  |  1,479 lines

  1.  
  2.     ┌───────────────────┐
  3.     │                   │ ║                UpLoadProcessor
  4.     │    ╥   ╥ ╥        │ ║
  5.     │    ║   ║ ║ ╓──╖   │ ║                 Version 2.13
  6.     │    ║   ║ ║ ║  ║   │ ║
  7.     │    ╙───╜ ╨ ║──╜   │ ║     (c) Copyright 1992-1996 - Stacy Smith
  8.     │            ╨      │ ║
  9.     └───────────────────┘ ║
  10.       ════════════════════╝
  11.  
  12.    ┌───────────────────────────────────────────────────────────────────────┐
  13.    │      Winner of the 1995 PCBoard Favorite Add-On Contest, Overall      │
  14.    │  Winner of the 1994 PCBoard Favorite Add-On Contest, Other Utilities  │
  15.    └───────────────────────────────────────────────────────────────────────┘
  16.  
  17.                                   Courtesy of:
  18.  
  19.                          The Bloom Beacon-Picayune BBS
  20.                         Node 1: *** DOWN TEMPORARILY ***
  21.                                     FidoNet
  22.                                      ILink
  23.                                     Intelec
  24.  
  25.                                   Stacy Smith
  26.                             Sakförarevägen 7, Lgh 27
  27.                              S-226 57 Lund  Sweden
  28.  
  29.  
  30. ┌───────────────────┐
  31. │  1. Introduction  │
  32. └───────────────────┘
  33.  
  34. This system was born out of a need for a universal upload processor.  There are
  35. many alternative systems available, but they are limited to the ZIP format and
  36. perhaps one or two others.  Few are able to handle self-extracting archives.
  37. Most are limited in the number of levels of archive nesting allowed in a file
  38. to be tested.  Very few properly handle archives with imbedded paths.  Many
  39. require the use of a third-party duplicate file checking system if you want to
  40. screen your uploads for duplicates.
  41.  
  42. Tired of waiting for PKZIP 2.something-or-another, I converted my BBS files
  43. over to the ARJ compression format, due to its superior compression ratio over
  44. PKZip and its features over LHA (I have since switched back to ZIP...the
  45. undertow was overwhelming <g>).  But due to that decision, the need for a
  46. universal upload processor became apparent, so off I went.
  47.  
  48. While I was at it, I decided to incorporate other technologies, such as
  49. duplicate checking, archive format conversion, customized displays and
  50. comments, internationalization, foreign language support, information lines,
  51. internal description files, etc., into a single package.  This software is the
  52. result of my efforts to allow my BBS to handle any archive that my users can
  53. throw at it.
  54.  
  55.  
  56. ┌─────────────────────────────────────────────┐
  57. │  2. Features of the UpLoadProcessor System  │
  58. └─────────────────────────────────────────────┘
  59.  
  60.   ∙ Native versions available for both 16-bit DOS and 32-bit OS/2!  DOS version
  61.     is fully OS/2, DESQview and Windows aware, including time-slice releasing.
  62.   ∙ Identifies and processes ARC, ARJ, HYP, LZH, PAK, RAR, SQZ, ZIP, ZOO, GIF
  63.     and JPEG files, regardless of their file extensions (ideal for software
  64.     distribution network files such as SDN).
  65.   ∙ Identifies and processes ARJ, LZH, RAR, SQZ and ZIP self-extracting (SFX)
  66.     archives.
  67.   ∙ Detects, processes and converts any archive with imbedded paths, retaining
  68.     all path information.
  69.   ∙ Scans ARC, PAK, ZIP and ZIP SFX archives for DOS reserved keywords to
  70.     prevent hacking by hex-editing. (ARJ and LHA are resistant to these type of
  71.     hacking attempts).
  72.   ∙ Detects ARJ security envelopes and ZIP version 1.x and 2.x authenticity
  73.     verification (-AV) stamps and may be retained intact.
  74.   ∙ Detects and rejects encrypted ARJ and ZIP archives.
  75.   ∙ Uses a recursive processing routine that will allow (theoretically)
  76.     unlimited nested archives and paths (the only limit is imposed by the OS
  77.     path).  This routine has been tested to 7 levels deep as of this writing.
  78.   ∙ Selected uncompressed files uploaded can be processed and compressed using
  79.     your default format.
  80.   ∙ Uploads can be filtered, privileged and TCANned on a wide variety of
  81.     criteria, including filename, file size, description keywords, etc..
  82.   ∙ Removes known BBS ads from archives; includes BBS ads database maintenance
  83.     functionality so that sysops can update their BBS ads databases in real
  84.     time.  ULP can also insert a BBS ad (ugh), if desired.
  85.   ∙ Updates the PCBoard DOWNLOAD.TXT file, if desired, with the correct archive
  86.     extension to reflect the conversion process.
  87.   ∙ Allows the use of up to 10 different archiving programs, all user-
  88.     configurable.  Any archiving program used that is not listed above will be
  89.     identified using its unique file extension only, until its signature is
  90.     determined and incorporated into ULP (after a new archive has demonstrated
  91.     widespread use).
  92.   ∙ Archive comments can be customized on an archive-by-archive basis through
  93.     the use of a template and @-variables.
  94.   ∙ Allows the use of up to 5 different file-checking programs, all user-
  95.     configurable, for virus and trojan checking, third-party utilities, etc.
  96.   ∙ Rejects GIF and JPEG files based upon image width, height, colors and/or
  97.     compression.  Different values can be selected for GIF and JPEG.
  98.   ∙ Allows the use of GIF and JPEG file checking programs, completely and
  99.     individually configurable.
  100.   ∙ User-definable disposition (keep, rename or delete) of corrupted, duplicate
  101.     or other archives (not virus-related).
  102.   ∙ User-definable disposition of virus-infected archives.
  103.   ∙ User-definable disposition of complete duplicate archives.
  104.   ∙ Incorporates it's own duplicate checking system, as well as the associated
  105.     database processing software.  This internal system is extremely fast and
  106.     it's database is much smaller than other systems.  Despite it's size, the
  107.     possibility of a false duplication is almost 1 in 10 trillion!  The system
  108.     is self-validating, to quickly determine if a database has been corrupted
  109.     or altered.
  110.   ∙ Optional seamless interface with the ZDCS duplication system.
  111.   ∙ ULP determines duplication using two filters, total duplication and
  112.     executable duplication, preventing false rejection by simply counting up
  113.     the number of blatantly duplicate files as other duplication systems do.
  114.   ∙ Converts all uploads into a default archive format of your choosing, or
  115.     they may be re-archived in their original format (user-defined).  Nested
  116.     and pathed archives can also be converted to your default format, or
  117.     re-archived using their original format.  SFX archives can be archived
  118.     using your default format, or optionally left alone after verification.
  119.     Archiving formats can be individually configured to not be converted to
  120.     your default, effectively allowing multiple defaults.
  121.   ∙ Can utilize a user-defined time window (in months) for acceptance of new
  122.     upload files, based on the actual or statistical average age of the files
  123.     within the archive, or optionally, the age of the newest file.
  124.   ∙ Supports the use of private and public upload directories.  Moves files and
  125.     upload descriptions from the private directory to the public directory.
  126.     Rejected uploads can be optionally moved to an offline area of your
  127.     choosing.  Single directory area operation may also be configured.
  128.   ∙ Duplication and age limits can be set on an area-by-area basis.
  129.   ∙ Honors the '/' identifier in the description marking the file as a private
  130.     upload for the sysop by processing the file, but not making it public.
  131.   ∙ Supports the use of DESC.SDI, FILE-ID.DIZ and VENDINFO.DIZ description
  132.     files in an archive, user-configurable.  The number of lines inserted is
  133.     also configurable, up to 40 lines maximum.
  134.   ∙ Smart word-wrapping word-wraps descriptions or leaves them as entered,
  135.     depending upon the presence of boxes, etc.
  136.   ∙ Can optionally insert an archive or GIF/JPEG information line in the file
  137.     description that contains various information about the upload.
  138.   ∙ Three modes of online testing are available: slow mode, which completely
  139.     processes files at the time of upload; normal mode, which fully unpacks the
  140.     archive and tests each file individually; and fast mode, which scans a ZIP
  141.     or ARJ archive directly for file CRCs, sizes and dates, and uses the
  142.     archiving program's internal integrity testing.
  143.   ∙ The online tester will accept a redirected ARJ or PKUNZIP archive listing
  144.     file to pre-verify the duplication and age limits before a user uploads the
  145.     actual archive, saving him or her wailing and gnashing of teeth.
  146.   ∙ ULP can generate COM port status output to inform the online user of the
  147.     progress of testing.  The format of the screen display is completely
  148.     sysop-designed through the use of template files; different template files
  149.     can be used for high-speed and low-speed callers.  Multi-lingual templates
  150.     files are supported.  ULP supports IRQs 2 through 15, non-standard port
  151.     addresses and baud rates to 115K in direct mode, supports FOSSIL drivers
  152.     and the OS/2 SIO API interface.  The port information can be defined on the
  153.     command-line or can be read directly from PCBOARD.SYS or DOOR.SYS.
  154.   ∙ Import of FWKCS(TM) contents_signature databases is supported to ease
  155.     transition to the ULP duplication system.  No need to rebuild databases for
  156.     FWKCS users!
  157.   ∙ Archives failed for exceeding duplication limits can be viewed using ULPSM,
  158.     to allow easy determination of manual archive acceptance.
  159.   ∙ User-selectable process logging to a disk file.  Two logging modes are
  160.     available: terse and verbose.  A debug operational mode can also be
  161.     utilized to help track down configuration errors.
  162.   ∙ Menu-driven windowed system manager for maximum ease of configuration,
  163.     including context-sensitive help.  Automatic installation speeds the
  164.     configuration and setup process for new users.
  165.   ∙ Written mostly in C (and a little assembler) for optimal speed, using
  166.     Microsoft C/C++ v7 and Watcom C/C++ v10.
  167.  
  168.  
  169. ┌─────────────────────────────────────────────────────┐
  170. │  3. Files Included in the ULP Distribution Archive  │
  171. └─────────────────────────────────────────────────────┘
  172.  
  173.     ULP.EXE         Upload processing program.
  174.     ULPSM.EXE       System and configuration manager for the ULP system.
  175.     ULPSM.HLP       Help data file for the ULP system.
  176.     BBSADS.DB       BBS ads database file.
  177.     ULP.DOC         This file.
  178.     ULP_FAQ.DOC     Frequently asked questions list.
  179.     SUPPORT.DOC     List of authorized support sites for my shareware.
  180.     HISTORY.DOC     ULP revision history in reverse order.
  181.     UPGRADE.DOC     Information specific to upgrading from previous versions.
  182.     REGISTER.FRM    Registration form for ULP and other software.
  183.     FILE_ID.DIZ     Internal description file.
  184.  
  185. When you unzip the distribution archive, you should see my PKZIP authenticity
  186. verification stamp, and a '-AV' after every file in the archive:
  187.  
  188.     # SSU301    The Bloom Beacon-Picayune BBS
  189.  
  190. If there are any files missing or added, or the -AV stamp is missing, the
  191. archive may have been tampered with.  It would be advisable to call my BBS
  192. (listed at the top of this document) or one of the support sites listed in
  193. SUPPORT.DOC for the latest version of ULP.
  194.  
  195. The 32-bit OS/2 executables ULP2.EXE and ULPSM2.EXE are distributed in a
  196. separate archive named ULP2_xxx.ZIP, where the "xxx" is the revision level of
  197. ULP.  Since this archive contains only the OS/2 executables, the general
  198. distribution archive must be downloaded as well.  This was done to reduce the
  199. size of the general distribution archive for those sysops not running OS/2 as
  200. their operating system.
  201.  
  202.  
  203. ┌───────────────────────────┐
  204. │  4. Program Requirements  │
  205. └───────────────────────────┘
  206.  
  207. To the best of my knowledge, the ULP programs will run on most any machine
  208. capable of running PCBoard 14.5+.  My BBS setup was OS/2 and DOS/DESQview on a
  209. LANtastic network with hard disks and CD-ROMs, but other sysops that I have
  210. been in contact with have successfully implemented ULP on setups with other
  211. varying hardware and software.
  212.  
  213. ULP has been developed and tested using the following third party utilities:
  214.  
  215.     ARJ 2.10 and higher (by Robert Jung)
  216.     HYPER 2.5 (by P. Sawatzki and K. P. Nischke)
  217.     LHA 2.12 and higher (by Haruyasu Yoshizaki)
  218.     LHarc 1.13c (by Haruyasu Yoshizaki)
  219.     PAK 2.51 (by NoGate Consulting)
  220.     PKPAK 3.61 (by PKWare)
  221.     PKZIP 1.10 and higher (by PKWare)
  222.     RAR 1.53 and higher [both DOS and OS/2 versions] (by Eugene Roshal)
  223.     SQZ 1.08.2 (by Jonas Hammarberg)
  224.     ZOO 2.01 and higher (by Rahul Deshi)
  225.     AntiAd 0.98ß and higher (by Stacy Smith)
  226.     F-PROT 2.07 and higher (by Frisk Software International)
  227.     SCAN V82 and higher (by McAfee Associates)
  228.     GFXCheck 1.00 and higher (by Stacy Smith)
  229.     GIFTEST 4.0 Beta 10 and higher (by Max Bernard/Dave Navarro)
  230.     ZDCS 2.03 and higher (by Stacy Smith)
  231.     SHROOM 2.3a (by Davis Augustine)
  232.     UnZip 5.12 (by Info-ZIP)
  233.     ZIP 2.0.1 (by Adler, Wales, Gailly and Rommel)
  234.     OS/2Scan 2.2.0 (by McAfee Associates)
  235.     PipeDOS (by Scott Maxwell)
  236.  
  237. The ULP system requires DOS 3.x or later (or compatible, such as an OS/2 DOS
  238. VDM), as it uses DOS SHARE-compatible file reads and writes, and can use the
  239. DOS PATH to find the archiving and other utilities.  The 32-bit OS/2 version of
  240. ULP must be run under OS/2 2.0 or later.
  241.  
  242. ULP's memory requirements are relatively small (about 250K for ULP.EXE, 450K
  243. for ULPSM.EXE), and can easily live in the same amount of memory as PCBoard
  244. (450K as recommended by Clark Development).  Note that all programs are spawned
  245. or shelled, which reduces the free memory for the program being executed.  It
  246. would be a good idea to have as much free conventional memory as possible (ULP
  247. itself cannot use EMS or XMS memory except for swapping), especially if you use
  248. the ARJ compression system, which requires more than 300K itself to run.  None
  249. of these limits exist for the 32-bit OS/2 versions of ULP, since we are using a
  250. real operating system. <g>
  251.  
  252.  
  253. ┌───────────────────┐
  254. │  5. Registration  │
  255. └───────────────────┘
  256.  
  257. The ULP system is not free; nor is ULP is crippled to force registration.  ULP
  258. is fully functional, and will always remain so.  The primary difference is no
  259. time delay and beg message once registered.  The time delays will begin 45 days
  260. after the initial installation of ULP.
  261.  
  262. Why register?  Besides a clean conscience, you will get a registration key that
  263. will work for all future versions of ULP, and will remove the delay and message
  264. at the end of execution of each program.
  265.  
  266. The registration fee for ULP is $25 for hobbyist BBSes.  The registration fee
  267. for commercial BBSes, defined as running your BBS in the course of a commercial
  268. business (e.g. more than 10 nodes), is $40.  Please print the file REGISTER.FRM
  269. and fill it out.  You can print out the form by issuing the following command
  270. from the DOS prompt:
  271.  
  272.     TYPE REGISTER.FRM > PRN
  273.  
  274.  
  275. ┌───────────────────────────────────────┐
  276. │  6. License, Warranty and Disclaimer  │
  277. └───────────────────────────────────────┘
  278.  
  279. I'll keep this part short and sweet, and dispense (mostly) with the legal-ese:
  280.  
  281.     License:  You are allowed to use ULP for 30 days, after which you must
  282.         either register ULP or stop using it completely.  Decompiling,
  283.         disassembly or any other form of reverse engineering the ULP programs
  284.         for any purpose is prohibited.  ULP registration is a license for your
  285.         use of ULP; I retain ownership of the software.  A single registration
  286.         applies to a single BBS system, regardless of the number of computers
  287.         used in the system.  If you run two or more distinct BBS systems on the
  288.         same computer or network (with different names), you require two or
  289.         more ULP registrations.  ULP registrations are not transferrable; you
  290.         cannot sell your registration to another sysop.  Refer to the
  291.         registration form for the currect pricing structure.
  292.  
  293.     Warranty:  There isn't one.  The only thing I'll guarantee is that ULP will
  294.         take up disk space, and will disappear when deleted.
  295.  
  296.     Disclaimer:  I'm not responsible for anything bad that happens.  ULP works
  297.         here, but I cannot be held responsible for it not working on your
  298.         computer or doing any damage to hardware or software.
  299.  
  300. If these aren't agreeable with you, then the best thing to do is delete ULP
  301. right now.  I'll do my best to help any user (registered or not) that wants to
  302. use ULP, and I'll act on bug reports as quickly as possible, but I simply
  303. cannot and will not be responsible for anything bad, like lost data, disk
  304. crashes, or whatever else you can think of.
  305.  
  306.  
  307. ┌────────────────────────────┐
  308. │  7. Conceptual Background  │
  309. └────────────────────────────┘
  310.  
  311. *******************************************************************************
  312.         READ THIS SECTION CAREFULLY, AS IT WILL MAKE LIFE MUCH EASIER!!!
  313. *******************************************************************************
  314.  
  315. Since the ULP system is much more comprehensive than other upload processing
  316. software, and therefore more complex, this overview and concept explanation
  317. should help you understand how ULP is designed and how it can be best used for
  318. your BBS.  Some of this information may be specific to PCBoard sysops, but the
  319. general concepts remain the same.
  320.  
  321. Note that ULP is an inter-operating set of tools, not distinct independent
  322. functions.  In this fashion, ULP is better able to track what is happening
  323. between online testing and the event without sysop intervention.
  324.  
  325. BATCH PROCESSING:
  326. ─────────────────
  327. As a minimum setup, you MUST run ULP as an event-mode batch processor, since
  328. ULP handles most of the database updating, archive conversion, file and
  329. description moving, archive information line computation, and other features
  330. during the batch run.  THIS IS NOT AN OPTION!!!  Even if you run everything
  331. online in slow mode, some quick maintenance needs to be performed by ULP in the
  332. event on ULP system files that are not safely manipulated online.
  333.  
  334. When running ULP in a batch mode (batch, override), such as processing new
  335. files that come in on tape, CD-ROM, file distribution network, etc., ULP's
  336. operation can summed up as follows:
  337.  
  338.     ULP looks in the source area and processes all new files it finds (files it
  339.     hasn't seen before).  ULP moves the good files to the destination area, if
  340.     one is defined.  ULP moves the defective files to the failure area, if
  341.     defined.
  342.  
  343. Pretty simple concept, huh? <g>  ULP's batch modes do what you tell it to in
  344. the upload directory areas configuration; it doesn't know or care about private
  345. areas, public areas or otherwise.  Through the use of a self-maintaining data
  346. file, ULP knows what it has and hasn't already processed in every source
  347. subdirectory configured.  This allows enormous flexibility for a variety of
  348. tasks.  Some possibilities:
  349.  
  350.   - Local uploads:  Configure an input directory as your ULP source area, and
  351.         your BBS new uploads directory as the output.  As you get new files,
  352.         such as downloads from your own BBSing activities, place any files you
  353.         want to locally upload into the input directory and the batch
  354.         processing will process all new files and move the good files into your
  355.         BBS new uploads directory.  Optionally, a failure directory can be
  356.         configured to have the bad files moved into for better organization.
  357.  
  358.   - Robocomm R&P:  This would be setup similarly to the local uploads, where
  359.         you pass the Robocomm download directory and download DIR listing that
  360.         it creates during R&P runs to ULP as the source area, and configure
  361.         your new uploads area as your ULP destination area.
  362.  
  363.   - File distribution nets (.TIC files):  ULP doesn't toss .TIC files (no sense
  364.         re-inventing the wheel), but ULP's batch processing works very well
  365.         with most any .TIC tosser.  There are two ways this can be implemented.
  366.         First, the .TIC tosser can toss all the files into a holding directory,
  367.         and then ULP can move the good ones to the new uploads subdirectory.
  368.         If this way is used, you simply need to configure the holding directory
  369.         as the ULP source area, and the new uploads directory as the
  370.         destination.
  371.  
  372.         The other way is to have the .TIC tosser toss the files to their final
  373.         destination in your file directories.  The requires that you configure
  374.         every subdirectory that the .TIC tosser may toss files into as the
  375.         source directory, leaving the destination area blank.  This allows ULP
  376.         to scan all files in all directories, selecting only the new ones, and
  377.         process them.  In this implementation, it would be a good idea to
  378.         configure a failure area so that defective files are moved out of the
  379.         available file area to prevent user access to them.
  380.  
  381. ULP's batch processing modes are designed to be able to be run without shutting
  382. down your BBS nodes, however it would be a good idea to disable uploads during
  383. batch processing.  The reason for this is that if an upload occurs in a
  384. directory currently under event processing, the directory listings may become a
  385. source of contention if they both try to update it simultaneously.  This is
  386. very small risk, but it was documented anyway just in case.
  387.  
  388. ONLINE TESTING:
  389. ───────────────
  390. I believe that all responsible BBS sysops verify all of their uploads prior to
  391. posting them, in order to protect both themselves and their users.  ULP is
  392. designed with idea in mind.  Most, if not all, sysops process uploads in one of
  393. two ways (listed with benefits and liabilities as I see them), regardless of
  394. what upload processing software they use:
  395.  
  396.     1) Make all uploads private, processing them during a system event for
  397.        public distribution.
  398.  
  399.        BENEFITS:
  400.            ∙ Takes up very little on-line time on the user's part to process
  401.              archives if the re-compression process is skipped while online.
  402.            ∙ Allows the conversion of all archives to a default format, so that
  403.              the BBS archives are consistent.
  404.            ∙ Allows the BBS to accept any archive format...face it, it's hard
  405.              enough to get some of these weenies to upload, much less compress
  406.              them the same way.
  407.  
  408.        LIABILITIES:
  409.            ∙ Files are not available immediately for download.
  410.            ∙ Does not catch duplicates or aged archives until after the user
  411.              has uploaded them, and perhaps leads to abuse by clever (?) users.
  412.              (It is assumed that these sysops still use the venerable 'PKUNZIP
  413.              -T' in their PCBTEST.BAT...)
  414.  
  415.     2) Process (test) each upload online after the user uploads them, and
  416.        making them available for immediate download.
  417.  
  418.        BENEFITS:
  419.            ∙ Catches duplicate, defective and aged archives while the user is
  420.              online, denying him upload credits.
  421.            ∙ Files are available immediately for download if they are not made
  422.              private in the PCBoard setup.
  423.  
  424.        LIABILITIES:
  425.            ∙ Takes up on-line time for a user, potentially adding to his
  426.              long-distance phone bill, discouraging further uploading; this
  427.              process is typically quite slow for large archives.
  428.  
  429. ULP also implements an online processing system, with varying modes of
  430. operation from complete processing to a very fast scan of the archive directly
  431. for needed data.  These modes will allow you to run your BBS in the most
  432. efficient manner possible for both you and your users.
  433.  
  434. Pay attention to this part!!!:
  435.  
  436. PCBoard (as do many BBS platforms) normally has two upload directories for each
  437. conference: a private and a public directory.  When PCBoard invokes
  438. PCBTEST.BAT, the upload is currently in the private directory.  If the archive
  439. fails the testing, it will remain in the source directory.  However, if it
  440. passes, one of two things will occur depending upon your system setup:
  441.  
  442.   - If you have made all uploads private in PCBSETUP, the file will remain in
  443.     the private directory.
  444.   - If you have not made uploads private, it will be moved BY PCBOARD (not ULP)
  445.     to the public directory.
  446.  
  447. This is an important point:  during online testing, ULP does not move the file
  448. in any way; the BBS software is expected to disposition the upload file itself.
  449. ULP feeds back the testing results to the BBS software in two ways, via
  450. semaphore files and via an errorlevel.  The errorlevels returned by ULP are
  451. listed in the appendix of this file.
  452.  
  453. In PCBoard, if you have made all uploads private (via PCBSETUP), the setup and
  454. configuration of ULP is a snap: the source directory is the private upload
  455. directory, and the destination is the public directory.  However, if you want
  456. to allow users access to untested uploads, then your source directory is the
  457. public upload directory, and the destination information is left blank.  To
  458. illustrate the operation:
  459.  
  460.   MAKE ALL UPLOADS PRIVATE           │  ALL UPLOADS AVAILABLE AFTER TESTING
  461.   ───────────────────────────────────┼─────────────────────────────────────
  462.   2 directories:  C:\PRIVATE         │  Same...
  463.                   C:\PUBLIC          │
  464.                                      │
  465.   User uploads a file, gets placed   │  Same...
  466.   in C:\PRIVATE by PCBoard           │
  467.                                      │
  468.   ULP tests it online                │  Same...
  469.                                      │
  470.   PCBoard leaves file in C:\PRIVATE  │  If it passes, PCBoard moves it to
  471.                                      │  C:\PUBLIC; if it fails, PCBoard
  472.                                      │  leaves it in C:\PRIVATE
  473.                                      │
  474.   ULP in the event processes all     │  ULP in the event processes all *new*
  475.   new uploads found in C:\PRIVATE    │  uploads found in C:\PUBLIC since the
  476.   since the last event and moves     │  last event
  477.   all good uploads to C:\PUBLIC      │
  478.  
  479. Further, ULP's online testing modes also have three different modes of
  480. operation:  slow, normal and fast.  Slow mode completely tests the upload
  481. exactly as ULP does in the batch event.  Note that you MUST use the "all
  482. uploads public" mode of operation to run slow mode (this shouldn't be a
  483. problem, since there's little logic in forcing a user to wait for complete
  484. processing of an upload, only to be held private until later).
  485.  
  486. ULP's online normal mode de-compresses the files, performs file, duplication
  487. and age checking, and then deletes the extracted files and returns to the BBS,
  488. informing the BBS of the test results.  It does not re-compress the archive,
  489. remove BBS ads, add information lines, etc.; this is saved for the event
  490. processing.  This mode can be used with both setup paradigms, making all
  491. uploads private or public.
  492.  
  493. Fast mode DOES NOT decompress the file; it firsts performs an archive integrity
  494. check, scans ARJ and ZIP archives directly for duplicate and age information,
  495. and then returns to PCBoard (if the archive is not ARJ or ZIP, then normal mode
  496. is forced).  Typical fast mode scans of multi-megabyte archives are performed
  497. in less than 5 seconds!  In fast mode, file checking (viruses, etc.) is left
  498. for ULP to do in the event (which is why the above discussion regarding
  499. private/public directories is important).  This mode can also be used either in
  500. making uploads public or private, although it would be a good idea to make them
  501. private with this mode, since the uploads are not file-checked (e.g. for
  502. viruses) during test.
  503.  
  504. ULP's online testing modes will also accept a redirected ARJ or PKUNZIP listing
  505. text file with the special name VERIFY.ULP (no other name is acceptable) as
  506. input to pre-verify an upload for a user, before the user actually spends his
  507. time uploading the file only to find out it won't pass the limits you set.
  508.  
  509.  
  510. ┌───────────────────┐
  511. │  8. Installation  │
  512. └───────────────────┘
  513.  
  514. Now, on to installation of the ULP system.  ULPSM makes the installation ULP
  515. very easy, since it has a built-in initial installation system and context-
  516. sensitive, cross-referenced and fully indexed online help.  After reading the
  517. general concepts described in the preceding section, the following outlines a
  518. general guide to installing the ULP system in the shortest time:
  519.  
  520. 1. Make a subdirectory on your hard drive.  For the purposes of this document,
  521.    we'll call it "C:\ULP".  Unarchive the ULP distribution archive into this
  522.    subdirectory.  You've more than likely already made it this far, since you
  523.    are reading this file. <g>
  524.  
  525.    * NOTE: The help file ULPSM.HLP is required by the ULP programs and must be
  526.            located in the same subdirectory as the ULP executables for proper
  527.            operation!
  528.  
  529. 2. The ULP system opens several files at once for various reasons.  You should
  530.    have a minimum of FILES=40 per node in your system CONFIG.SYS file, since
  531.    ULP is run in conjunction with your BBS.  On the machine/node that runs the
  532.    ULPSM duplication database compilation event, I suggest at least FILES=50,
  533.    since the ULPSM database compilation routine opens up to 20 files
  534.    simultaneously.
  535.  
  536. 3. If you are running ULP under a network or a DOS multitasking operating
  537.    system, you should already have DOS's SHARE.EXE loaded (unless you are using
  538.    a SHARE-compatible network operating system such as Novell).  You must have
  539.    SHARE capabilty loaded in order to take advantage of the file sharing and
  540.    locking methods used by the ULP programs to prevent data loss.  (If you are
  541.    running a single-node system without a multitasker, SHARE is not needed).
  542.  
  543.    * NOTE: MS-DOS has a documented bug when SHARE is loaded high, where it
  544.            loses the table in memory.  Load SHARE low to prevent potential
  545.            sharing problems!
  546.  
  547. 4. Make sure you have your BBS software set to swap out of memory when running
  548.    an upload processor.  This is required due to memory requirements of
  549.    archivers, virus testers, etc., and probably is already set for most BBS
  550.    packages.  Check anyway... <g>
  551.  
  552. 5. Run ULPSM using the following command line:
  553.  
  554.         ULPSM -CULP.CFG
  555.  
  556.    The first time you use a new configuration filename in the ULPSM command
  557.    line, ULPSM will create a configuration file and generate the required
  558.    external files that a standard ULP implementation uses.  When you are asked
  559.    to save the configuration, save it.  From this starting configuration, only
  560.    a few specific adjustments need to be made.  Note that the pre-configured
  561.    archiver command lines are different based upon whether the DOS or OS/2
  562.    version of ULPSM is used to create the configuration file.
  563.  
  564. 6. Run ULPSM again, with the same command line as above.  You will need to make
  565.    the following configuration edits to complete your installation; don't
  566.    forget about the online help...there's a lot of useful information in there!
  567.    In addition, ULPSM will check for common configuration errors and provide
  568.    messages indicating any problems that it may find.
  569.  
  570.        Menu A (General options):
  571.  
  572.          - If you are running PCBoard, enter the full path and filename for
  573.            your DOWNLOAD.TXT file if automatic updating is desired.  Otherwise,
  574.            leave it blank.
  575.  
  576.        Menu B (Upload directories):
  577.  
  578.          - Select an unused slot and press ENTER.  Enter the appropriate
  579.            subdirectories and directory listings for your upload processing.
  580.            Refer to the following section titled "Configuration" and the online
  581.            help for more detail on this topic.  For the time being, you may
  582.            only want to configure one or two sets of upload directories for
  583.            testing purposes.
  584.  
  585.        Menu E (Archivers):
  586.  
  587.          - ULPSM pre-configures the most common archivers used (ARJ, LZH and
  588.            ZIP for DOS, and LZH and ZIP for OS/2).  If one or more of these
  589.            archivers are not available in your DOS or OS/2 path, you will need
  590.            to either put them in the path, provide the path directly in the
  591.            command lines in ULPSM or remove them from the ULP configuration.
  592.            Putting the required archivers in your path is more than likely the
  593.            simplest solution.
  594.  
  595.        Menu F (Virus/file testers):
  596.  
  597.          - Due to the wide variety and utilization of virus scanners available,
  598.            ULPSM makes no assumptions as to what you wish to use.  In this
  599.            menu, configure one or more file and virus testers to be used by
  600.            ULP.  Pay special note to the ULPSM help system, as it contains
  601.            recommended command lines for many of the more popular DOS and OS/2
  602.            virus scanners.
  603.  
  604.        Menu G (Duplication checking):
  605.  
  606.          - If you are using the ZDCS duplication system, you will need to
  607.            change the default setting from 'I' to 'Z', and provide the path to
  608.            ZDCS in the "Edit duplicate checking parameters" submenu.
  609.  
  610.          - If you are using the internal duplication system, you will need to
  611.            build and compile a database.  Select submenu B (Add files to
  612.            duplication database) and use one of your download directories as a
  613.            starting point.  After ULPSM is finished, select submenu C (Compile
  614.            duplication database) to compile the database.  More detail on
  615.            building your database will follow; for now, this will get us a
  616.            working database to tinker with.
  617.  
  618.        Menu J (GIF/JPEG file testing):
  619.  
  620.          - If you wish to use a graphics checking program (e.g. GFXCheck or
  621.            GIFTEST) to test GIF and/or JPEG uploads, place the command line in
  622.            this menu.  Again, refer to the online help for recommended command
  623.            lines.
  624.  
  625.        Menu L (Online testing):
  626.  
  627.          - ULPSM defaults to the normal online testing mode with a switchover
  628.            to fast mode at 500K.  If either slow or fast testing modes are
  629.            desired, alter the settings.
  630.  
  631.        Menu M (Process data file):
  632.  
  633.          - Select submenu B to initialize the process data file.  Generally,
  634.            initialization is required only once, unless otherwise instructed by
  635.            ULPSM.
  636.  
  637.        Menu N (Advanced options):
  638.  
  639.          - If you are not running PCBoard as your BBS software, these settings
  640.            may make integration of ULP into your system easier.  If you are
  641.            running PCBoard, adjustment of these values is usually not necessary
  642.            and will probably break your setup.
  643.  
  644.    Exit ULPSM, saving your configuration edits.
  645.  
  646. 7. Take a look at your ULP subdirectory now.  You will see a dozen or so
  647.    external configuration files that ULPSM automatically created.  These can be
  648.    edited either with a conventional text editor or through ULPSM using the
  649.    F2/F3 hotkeys, where appropriate.
  650.  
  651.    One of the newly-created files needs to be relocated.  Copy the PCBTEST.???
  652.    file to your \PCB subdirectory, copying over the existing one.  Back up your
  653.    old one if you think you might want it back later (I don't think you will,
  654.    though <g>).
  655.  
  656.    You will also find a file named ULPBLT.  This is a generic bulletin that you
  657.    may wish to post on your BBS to explain to your users the process for pre-
  658.    verifying uploads to your system via ULP.
  659.  
  660. 8. You are now all configured, and almost ready to go.  You now need to build
  661.    a complete ULP database if you are using the internal duplication database.
  662.    This can be postponed until later if you wish to do some testing or
  663.    experimentation with ULP prior to investing the time in constructing a
  664.    complete duplication database.  Refer to the section titled "Internal
  665.    Duplication Checking" for additional discussion.
  666.  
  667. 9. Edit your system event file, adding the following lines somewhere in it:
  668.  
  669.         C:                         ─────────────────┐  Change as necessary
  670.         CD \ULP                    ─────────────────┘  to match your setup
  671.         ULP -CULP.CFG -MBATCH -T0
  672.         ULPSM -CULP.CFG -S -T0
  673.  
  674.    This will run the ULP event batch processor and then compile your
  675.    duplication database with ULPSM (the last line is required only if you are
  676.    using ULP's internal duplication database system).
  677.  
  678. 10. That wasn't so bad, now was it?  Feel free to poke around with other
  679.    settings once you have verified that ULP is functioning properly.
  680.  
  681.  
  682. ┌────────────────────┐
  683. │  9. Configuration  │
  684. └────────────────────┘
  685.  
  686. Most of the information required to install ULP is contained in the online help
  687. system in ULPSM.  This exhaustive information will not be repeated here for
  688. brevity, but some topics that require additional clarification will be
  689. addressed here.
  690.  
  691. UPLOAD DIRECTORIES:
  692. ───────────────────
  693. In the past, this topic has been a point of some confusion to sysops.  ULP
  694. makes use of the upload directories configured in ULPSM during both online and
  695. batch processing, but in different ways.
  696.  
  697. When testing a file online, ULP is provided all necessary information by the
  698. BBS software.  It really doesn't need any of the upload directories defined in
  699. the ULP configuration; however, it does a comparison to the path passed by the
  700. BBS software and the areas configured to try and find a match.  If a match is
  701. found, ULP will use any area-specific settings (e.g. duplication and age
  702. limits) that are configured.  If no match is found, ULP will spit out a warning
  703. and continue with the default settings.
  704.  
  705. On the other hand, during batch (and override) processing, ULP makes extensive
  706. use of the upload directory configuration.  It will go through all upload
  707. directory sets configured, in order, processing any new files found in the
  708. source area, moving the good files to the destination (if configured) and any
  709. defective files to the failure area (if configured).
  710.  
  711. It is extremely important that you do not use one upload directory set's
  712. destination or failure subdirectory as a another set's source directory.  This
  713. can cause files to processed multiple times, resulting in duplication failures
  714. and other headaches.
  715.  
  716. Generally, if you make all uploads private, your source area will be your
  717. private upload area and the destination area will be your public upload area.
  718. If you make all uploads public, the source area will be your public upload area
  719. and the destination area will be blank.  In either case, failure areas can be
  720. used if desired.  Refer to the section titled "Conceptual Background" for more
  721. detail.
  722.  
  723. ONLINE TESTING:
  724. ───────────────
  725. To use ULP for on-line testing of archives, the following command line should
  726. be invoked.  During the initial configuration, ULPSM creates a PCBTEST.BAT for
  727. PCBoard sysops to use, which should be all that is necessary for PCBoard
  728. sysops.
  729.  
  730.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -T0
  731.  
  732. However, for non-PCBoard sysops, the following discussion outlines how to
  733. install ULP for online testing in your BBS package.
  734.  
  735. Two of the three passed % parameters to the batch file are required:  the
  736. filename to test, passed as %1 by PCBoard and the mode, passed as %2.  The
  737. temporary description file, passed as %3, is not required but will be updated
  738. by ULP if passed.
  739.  
  740. The filename (-F switch) should include a complete pathspec.  ULP will compare
  741. the path to the source upload directories configured in ULPSM, and if a match
  742. is found, ULP will use any directory-specific settings configured.  Therefore,
  743. the path(s) configured in ULPSM should match those configured in your BBS
  744. software for new uploads.
  745.  
  746. The only acceptable modes (-M switch) for online testing are "UPLOAD", "TEST"
  747. and "ATTACH" (these correspond to PCBoard's modes).  Upload mode is basically a
  748. full process, and is the most commonly-used mode.  Test mode unpacks the
  749. upload, performs file-checking and returns; this is done to allow the online
  750. user to test a file on the BBS in case a problem is found after download.
  751. Attach mode performs a complete test, but doesn't fail the upload under any
  752. circumstances; this is used primarily for attaching file to messages on the
  753. BBS.
  754.  
  755. The temporary description file (-D) is created by the BBS software and is
  756. expected to be in a format identical to the other upload directories as
  757. configured.  If it is not, do not use this parameter and let the event mode
  758. execution of ULP update the description.
  759.  
  760. SERIAL I/O DEFINITION:
  761. ──────────────────────
  762. ULP will gather any information that is required for operation from the door
  763. drop file located in the startup subdirectory (PCBOARD.SYS and DOOR.SYS are
  764. supported).  If desired, the serial port information can be handed directly to
  765. ULP by using the -P and -B command switches:
  766.  
  767.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -P3E8,5 -B57600
  768.  
  769. The -P parameter can be 1 or 2, representing standard COM1 and COM2, or in the
  770. format "address,IRQ" as illustrated above for non-standard serial ports.  If -P
  771. is set to 0, this will suppress the remote comm I/O entirely.  The locked DTE
  772. baud rate of the port (not the DCE carrier speed) can be passed via the -B
  773. parameter.
  774.  
  775. If you are using the DSZPORT environment variable to define the port IRQ and
  776. address to DSZ, ULP can also use this information as well.  If the drop file
  777. indicates that a non-standard port is in use (e.g. not COM1 or COM2), ULP will
  778. automatically look for the DSZPORT environment variable.  Refer to the DSZ
  779. documentation for the proper specification of the DSZPORT environment variable
  780. (short version: it looks like the -P parameter, "SET DSZPORT=3E8,5").
  781.  
  782. ULP is capable of using a FOSSIL driver, but you must tell it to do so via the
  783. ULP command line.  Use the -X command switch to tell ULP to use the FOSSIL
  784. driver:
  785.  
  786.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -X
  787.  
  788. ULP will use the port specified in the door drop file or on the command line
  789. via the -P switch.  As a quick technical aside, with most FOSSIL drivers, the
  790. FOSSIL port number is normally 1 less than the COM port number.  In other
  791. words, COM1 is FOSSIL port 0, COM2 is FOSSIL port 1, etc..  ULP handles this
  792. conversion internally, but if necessary, you can force a specific port number
  793. via the -P command line parameter:
  794.  
  795.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -P1 -X
  796.  
  797. The above command line will force ULP to use FOSSIL port 0, which is by
  798. convention, COM1.
  799.  
  800. Similarly, the DOS ULP is also capable of talking directly to the OS/2 SIO API.
  801. In order to use this mode, you must tell ULP to do so via the -O command line
  802. switch:
  803.  
  804.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -O
  805.  
  806. Note that the OS/2 version of ULP obviously must use the OS/2 SIO API, so the
  807. -O switch is not required (but is accepted for compatibility's sake).
  808.  
  809. REMOTE DISPLAY TEMPLATES:
  810. ─────────────────────────
  811. The remote display templates offer tremendous flexibility for sysops to
  812. customize the user display that is produced by ULP.  While the template file
  813. design may seem a bit odd, it provides maximum flexibility for customization.
  814.  
  815. Basically, display templates are comprised of two sections: the form, and the
  816. responses.  When ULP is started up to perform an online test, the appropriate
  817. template is loaded and the form is immediately displayed.  Special {-variables
  818. are used in the form to tell ULP where in the form to put the responses.
  819.  
  820. As the file is processed by ULP, at special points in the processing ULP will
  821. output the responses, selecting the appropriate response based upon pass or
  822. failure.  If a process is not performed (such as packing when testing in normal
  823. or fast modes), no response is output for that process.  The form can be edited
  824. to eliminate these unnecessary lines if desired and appropriate.
  825.  
  826. As an example, review the following simple display template:
  827.  
  828.     ;
  829.     ; ****************************************************
  830.     ; *  UpLoadProcessor sample remote display template  *
  831.     ; ****************************************************
  832.     ;
  833.     ; Form definition
  834.     ;
  835.     BEGIN_FORM
  836.     Verifying @FILENAME@ from @USER@ on node @NODE@...
  837.     ┌─────────────────────────┐
  838.     │   UpLoadProcessor @VERSION@  │  Registered to: @BOARDNAME@
  839.     │ (c) 1992-96 Stacy Smith │  [Processing at @SYSTIME@ on @SYSDATE@]
  840.     └─────────────────────────┘
  841.         Upload format:          {FMT}
  842.         Unpacking file:         {UNP}
  843.         Testing file integrity: {CHK}
  844.         Duplicate checking:     {DUP}
  845.         Age checking:           {AGE}
  846.         Packing archive:        {PCK}
  847.         Other checks:           {MSC}
  848.     END_FORM
  849.     ;
  850.     ; Response definitions
  851.     ;
  852.     BEGIN_RESPONSES
  853.     @OPTEXT@
  854.     @OPTEXT@
  855.     Unpacked OK
  856.     Unpacking failure!
  857.     Passed virus checks
  858.     Failed virus checks
  859.     Passed duplication
  860.     Failed duplication
  861.     Passed age
  862.     Failed age
  863.     Compressed OK
  864.     Compressing failure
  865.     OK
  866.     Failed!
  867.     END_RESPONSES
  868.     ;
  869.     ; End of UpLoadProcessor template file
  870.     ;
  871.  
  872. The actual form is sandwiched between the two keywords "BEGIN_FORM" and
  873. "END_FORM"; 18 lines by 78 columns is the maximum size allowed in the form.
  874. Various @-variables can be used in the form and responses.  A complete list is
  875. in the ULPSM online help; unsupported @-variables will not be translated.
  876. There is no support for @CLS@; the reason for this is that ULP automatically
  877. clears the screen before displaying the form.  This allows ULP to properly
  878. determine the screen location of responses on a consistent basis.
  879.  
  880. Note the special variables {FMT}, {UNP}, {CHK}, {DUP}, {AGE}, {PCK} and {MSC}.
  881. These variables do nothing except tell ULP where the specific responses are to
  882. be located, and have a different format to help prevent confusion.  During form
  883. display, they are removed with no output so that they can ignored when
  884. attempting to align text.  The following table defines the meaning of these
  885. seven special macros:
  886.  
  887.     {FMT}   Location for the upload file format known/unknown response
  888.     {UNP}   Location for the unpacking pass/fail response
  889.     {CHK}   Location for the file/virus checking pass/fail response
  890.     {DUP}   Location for the duplicate checking pass/fail response
  891.     {AGE}   Location for the age checking pass/fail response
  892.     {PCK}   Location for the packing pass/fail response
  893.     {MSC}   Location for the miscellaneous pass/fail response
  894.  
  895. The "miscellaneous tests" defined are primarily the TCANs.  This response is
  896. always the last response displayed during processing.
  897.  
  898. Similarly, the responses are sandwiched between the two keywords
  899. "BEGIN_RESPONSES" and "END_RESPONSES".  @-variables can also be used in the
  900. form and responses, but all responses must be 50 characters or less.  The order
  901. of the responses is critical; no responses can be skipped (but they can be left
  902. blank).  The response order is as follows:
  903.  
  904.     BEGIN_RESPONSES
  905.     Archive format identified response string (usually just @OPTEXT@)
  906.     Archive format unknown response string (usually just @OPTEXT@)
  907.     Unpacking passed response string
  908.     Unpacking failed response string
  909.     File/virus checking passed response string
  910.     File/virus checking failed response string
  911.     Duplicate checking passed response string
  912.     Duplicate checking failed response string
  913.     Age checking passed response string
  914.     Age checking failed response string
  915.     Packing passed response string
  916.     Packing failed response string
  917.     Miscellaneous tests passed response string
  918.     Miscellaneous tests failed response string
  919.     END_RESPONSES
  920.  
  921. A special macro called @OPTEXT@ can be used in the responses.  For each
  922. possible response, the @OPTEXT@ macro will be loaded with special process-
  923. specific information, such as duplication ratio and archive age.  The following
  924. list describes the contents of the @OPTEXT@ macro for each of the seven
  925. possible responses:
  926.  
  927.     {FMT}   @OPTEXT@ contains the archiving format extension or "Unknown"; if
  928.             the archive has an -AV or is secured, @OPTEXT@ will be appended
  929.             with "(-AV/secure)".
  930.     {UNP}   @OPTEXT@ contains the program name used to unpack the upload.
  931.     {CHK}   @OPTEXT@ contains the last file checker executed (primarily for
  932.             failures).
  933.     {DUP}   @OPTEXT@ contains the total and executable duplication ratios in
  934.             the format "100%/100%".
  935.     {AGE}   @OPTEXT@ contains the age of the archive in months.
  936.     {PCK}   @OPTEXT@ contains the program name used to pack the upload.
  937.     {MSC}   @OPTEXT@ contains the name of the test (primarily for failures).
  938.  
  939. Note that by displaying results to the remote user can be a double-edged sword.
  940. While it can prevent the requisite questions from a user as to why an upload
  941. failed, this could also allow the "clever" user to bypass a failure by tweaking
  942. the archive contents just enough to make it pass.  Consider this before you use
  943. the @OPTEXT@ response macros.
  944.  
  945. All comments in the template file begin with a semi-colon, however, comments
  946. are not permitted between the BEGIN_FORM and END_FORM form definition or
  947. between the BEGIN_RESPONSES and END_RESPONSES response definition.
  948.  
  949. * NOTE: While the remote display template system is designed primarily for
  950.         ASCII and ANSI, RIP screens *may* be possible (I don't know as I
  951.         haven't tried it) by creating the appropriate RIP script command
  952.         strings in the form and response definitions.  However, the RIP
  953.         graphics will not be shown in the local display window.
  954.  
  955. For those who may be curious, the above example template will produce a display
  956. that looks like (for a passed upload):
  957.  
  958.     Verifying FOO.ZIP from JOE BLOW on node 4...
  959.     ┌─────────────────────────┐
  960.     │   UpLoadProcessor 2.00  │  Registered to: Nice Guys 'R Us
  961.     │ (c) 1992-96 Stacy Smith │  [Processing at 12:01 on 01/02/95]
  962.     └─────────────────────────┘
  963.         Upload format:          ZIP
  964.         Unpacking file:         Unpacked OK
  965.         Testing file integrity: Passed virus checks
  966.         Duplicate checking:     Passed duplication
  967.         Age checking:           Passed age
  968.         Packing archive:        Compressed OK
  969.         Other checks:           OK
  970.  
  971. By using the F4 hotkey in ULPSM, you can preview your display template, taking
  972. into consideration your current ULP configuration.
  973.  
  974. COMMENT TEMPLATE:
  975. ─────────────────
  976. The comment template allows customization of a comment for each file processed
  977. through the use of @-variables.  Archive statistics, file descriptions,
  978. processing date and time, BBS advertising, etc. can all be implemented in this
  979. template for display by using @-variables.  A complete list of @-variables and
  980. macros is available in the online help.  The following is a suggested comment
  981. template:
  982.  
  983.     ┌─────────────────────────────────────────────────────────────────────────┐
  984.     │  This archive has been fully tested and verified using UpLoadProcessor  │
  985.     │     by your Sysop to ensure your system's safety and file quality!      │
  986.     └─────────────────────────────────────────────────────────────────────────┘
  987.  
  988.                          Processed at @SYSTIME@ on @SYSDATE@
  989.  
  990.     Archive statistics:
  991.         Number of files:  @NUM@
  992.         Oldest file:      @OLD@
  993.         Newest file:      @NEW@
  994.         Total bytes:      @BYTE@
  995.  
  996.     Archive description:
  997.     ───────────────────────────────────────────────────────────────────────────
  998.     @DESC@
  999.     ───────────────────────────────────────────────────────────────────────────
  1000.  
  1001.  
  1002. ┌─────────────────────────────────────┐
  1003. │  10. Internal Duplication Checking  │
  1004. └─────────────────────────────────────┘
  1005.  
  1006. When first installing ULP, if you plan to use ULP's internal duplication
  1007. database system, the duplication database must be created from scratch.  If you
  1008. have mostly ZIP and ARJ files, then this can be very quick (on the order of 5
  1009. minutes per 1000 archives on a hard disk, CD-ROMs typically take between 30
  1010. minutes and an hour...these numbers are from my experience, your mileage may
  1011. vary).  As usual, the online help provides a lot of useful information on
  1012. specific duplication database manipulation options.
  1013.  
  1014. If you use CD-ROMs on your BBS, pre-built databases may already be available
  1015. for your CD-ROM, greatly reducing the amount of time required to get your
  1016. system ready.  ULPSM can merge these pre-built duplication databases with your
  1017. main database in a matter of seconds versus spending the time building it
  1018. yourself.
  1019.  
  1020. If you are a user of the FWKCS duplication database system, ULPSM can import
  1021. and translate the FWKCS database directly into the ULP format.  This will also
  1022. be preferable from a speed standpoint to rebuilding the database from scratch.
  1023.  
  1024. If you have files that are off-line, they can be added to your duplication
  1025. database fairly easily.  Simply copy your offline files to a temp directory
  1026. (for the sake of argumentation, let's call it "C:\TEMP").  You can then add
  1027. them to the duplication database via ULPSM.  After the offline files are added,
  1028. just delete them from the temporary subdirectory, and if someone uploads a file
  1029. that you already have off-line, it will be rejected by ULP.
  1030.  
  1031. Once you have your database built, regular maintenance on the duplication
  1032. database files is required.  This will compile any new data from the day's
  1033. uploads into the main database, and remove any added temporary data from ULP's
  1034. online testing.  This is not required to be done every day, but performance
  1035. will degrade as more and more files (e.g. hundreds or thousands of uploads) are
  1036. processed without compilation.
  1037.  
  1038. To control duplication database size, database entries can also be purged from
  1039. the database.  Removal is based upon the file date represented by the entry,
  1040. NOT the date the file entry was made into the database; these are not one and
  1041. the same.  In general, this function is not required...ULP's internal database
  1042. system sees no performance degradation until the database exceeds 30 megabytes
  1043. (as a baseline, about 75 full CD-ROMs), which no one has even come close to
  1044. yet.  If you do wish to purge, purge using an age of at least twice your
  1045. configured age limit...this will help ensure that required data is maintained.
  1046.  
  1047. Note that ULPSM also locks the duplication database, preventing any other
  1048. program, including ULP, from accessing it.  I strongly suggest you have uploads
  1049. disabled when running ULPSM to compile your database to prevent upload failures
  1050. due to the inability to access the database.  At the minimum, perform the
  1051. compilation at a time when uploads are not likely to occur.
  1052.  
  1053. As with any other database system, you should backup your ULP duplication
  1054. database and index files regularly.  ULPSM validates your duplication database
  1055. during compilation to ensure that it hasn't been corrupted, but if corruption
  1056. occurs (due to crashes, power loss, deletion, bad karma, etc.), the database
  1057. may not be repairable.  Therefore, backup regularly!!!
  1058.  
  1059.  
  1060. ┌────────────────────┐
  1061. │  11. Other Topics  │
  1062. └────────────────────┘
  1063.  
  1064. While the ULP system is mostly automatic, there are some occasions where
  1065. operations may have to be done manually.  The following topics discuss some of
  1066. the issues related to running ULP manually, including some command line
  1067. switches.
  1068.  
  1069. OS/2 SPECIFIC VERSION (ULP & ULPSM):
  1070. ────────────────────────────────────
  1071. The OS/2 executables of ULP and ULPSM are native 32-bit executables that
  1072. require OS/2 version 2.0 or later.  They are completely compatible with the DOS
  1073. versions of ULP and ULPSM, including all configuration and data files, but do
  1074. not have some of the functional limits imposed on the DOS versions due to
  1075. memory constraints.
  1076.  
  1077. However, it should be noted that separate configurations will be required if
  1078. you wish to use both the DOS and OS/2 versions of the ULP programs since the
  1079. external utilities are different in both name and command lines.  For example,
  1080. since PKWARE hasn't updated their PKZIP program for OS/2 beyond version 1.02,
  1081. you will need to use an alternate ZIP program, such as InfoZIP's ZIP 2.0.1 or
  1082. later.  These command lines are, of course, different, hence different ULP
  1083. configuration files are required.
  1084.  
  1085. In addition, during testing, enhanced speed has been noted when *not* running
  1086. external programs in a window.  This is partly due to the VIO speed of OS/2 and
  1087. CPU overhead of the I/O redirection thread.
  1088.  
  1089. You should not use DOS external programs in the OS/2 version of ULP.  However,
  1090. if you must use an occasional DOS program, you should use PipeDOS, a utility by
  1091. Scott Maxwell that correctly passes the program errorlevel back to the calling
  1092. OS/2 program, which is a requirement for ULP to operate correctly.  After
  1093. installing PipeDOS per it's instructions, simply configure the DOS command line
  1094. as you normally would in ULPSM, but the first argument before the program name
  1095. will be "pipedos", e.g.:
  1096.  
  1097.     pipedos command arg1 arg2 ...
  1098.  
  1099. PipeDOS-called DOS programs should not be run in a window.  Also, PipeDOS-
  1100. called programs are very slow, so I recommend you use them only for programs
  1101. that are called infrequently and that don't have OS/2 counterparts (e.g. ARJ).
  1102.  
  1103. MICROSOFT WINDOWS (ULP & ULPSM):
  1104. ────────────────────────────────
  1105. Do not enable idle detection in Windows 3.x or Windows 95 (e.g. don't check the
  1106. "Detect Idle" box of the Advanced Settings of the PIF file).  Doing so may
  1107. cause Windows to take away so many time slices from ULP in the background that
  1108. it will appear to hang (until brought back into the foreground or a key is
  1109. pressed).  ULP gives away time slices without requiring Windows to do it's
  1110. thinking for it (what little thinking Windoze does <g>).
  1111.  
  1112. DESQVIEW (ULP & ULPSM):
  1113. ───────────────────────
  1114. The DOS versions ULP and ULPSM write text directly to video for speed.  If you
  1115. experience bleed-through of the ULP video in DESQview, you may need to enable
  1116. the flag for those windows that will run the ULP software to tell DESQview that
  1117. applications write directly to video (first page of settings, near the bottom).
  1118. That should eliminate the bleed-through.
  1119.  
  1120. ONLINE HELP (ULPSM):
  1121. ────────────────────
  1122. The online help is fully indexed and cross-referenced with other related topics
  1123. to ease navigation through the database.  If some fields seem to have
  1124. relatively little information, this generally means that another topic,
  1125. normally on a higher-level menu, has more in-depth information.  If you have
  1126. difficulty finding a topic, go into the index and locate the pertinent titles
  1127. to find the help you need.
  1128.  
  1129. If you do not have a mouse to help navigate ULPSM's online help screens, the
  1130. "Index" buttom can be activated by pressing the Alt-I key combination.  Also,
  1131. the "Prev" button is accessed by Alt-F1 and "Quit" is the same as pressing ESC.
  1132.  
  1133. The general idea behind ULP's documentation is that this document outlines how
  1134. to best install and use ULP.  The online help outlines detailed configuration
  1135. information and some instructional information on ULPSM.
  1136.  
  1137. DISPLAY READABILITY (ULP & ULPSM):
  1138. ──────────────────────────────────
  1139. ULP and ULPSM both utilize time delays at certain points in the process to
  1140. allow users to see what's going on with ULP.  The default time delay is 3
  1141. seconds, but can be altered between 0 and 10 seconds via the -T command line
  1142. switch.  Generally, during the event batch processing and online processing of
  1143. uploads, you should set the time delay to 0 for maximum speed.  For example, to
  1144. change the time delay to 5 seconds for a run of ULPSM:
  1145.  
  1146.     ULPSM -CULP.CFG -T5
  1147.  
  1148. When manually running ULP or trying to debug a configuration error, it may be
  1149. helpful to use a longer time delay to see exactly what ULP is doing normally at
  1150. high speed.
  1151.  
  1152. QUIET (ULP & ULPSM):
  1153. ────────────────────
  1154. ULP and ULPSM normally issue a beep on an error or warning, but the beep can be
  1155. disabled using the -Q switch:
  1156.  
  1157.     ULP -CULP.CFG -MBATCH -Q
  1158.     ULPSM -CULP.CFG -Q
  1159.  
  1160. ESCAPING FROM LONG PROCESSES (ULP & ULPSM):
  1161. ───────────────────────────────────────────
  1162. When running long, time-consuming processes, namely ULP's batch processing
  1163. modes and ULPSM's database addition, it is possible to abort the process by
  1164. pressing the ESC key.  Note that ULP and ULPSM may not immediately respond!
  1165. They must finish the current task before allowing you to abort the process.
  1166. Further, if you are processing multiple subdirectories in a run, the abort will
  1167. affect only the current subdirectory.  ULP and ULPSM will start the next
  1168. subdirectory after cleaning up from the current abort.  This allows you to pick
  1169. and choose what to process if desired.
  1170.  
  1171. GIF/JPEG PROCESSING (ULP):
  1172. ──────────────────────────
  1173. By default, GIF and JPEG file detection and processing is enabled.  In order to
  1174. disable all GIF and/or JPEG file processing, set all three of the minimum image
  1175. parameters to 0.  In doing so, you disable not only the file processing, but
  1176. the file format detection, resulting in a GIF or JPEG upload being rejected as
  1177. an unknown format.
  1178.  
  1179. On the other hand, if you wish to accept *all* GIF or JPEG files, regardless of
  1180. image parameters, set the minimum image width and height to 0, but set the
  1181. minimum number of colors to 1 (all graphic images have at least 2 colors).
  1182. This will have the effect of detecting and processing the requested graphic
  1183. format without rejecting based upon image values.
  1184.  
  1185. DEBUGGING (ULP):
  1186. ────────────────
  1187. When attempting to find a configuration error or track down a potential bug in
  1188. ULP, using debug mode will be a great help.  Debug mode will slow down the ULP
  1189. display, force all external programs to run full-screen and dump virtually all
  1190. screen output to the log file.  To use debug mode, add the -! switch:
  1191.  
  1192.     ULP -CULP.CFG -MBATCH -!
  1193.  
  1194. ALL BUG REPORTS MUST BE ACCOMPANIED BY A DEBUG LOG for me to be able to figure
  1195. out the problem.  Note that if you are experiencing a problem that causes a
  1196. system hang, the debug log is in the data work subdirectory with a filename
  1197. "$LOG????".
  1198.  
  1199. OVERRIDE MODE (ULP):
  1200. ────────────────────
  1201. During the course of operation, ULP may (depending upon your configuration)
  1202. rename archives that have been found to be defective in some manner according
  1203. to the following convention:
  1204.  
  1205.     .UNK    Unknown archive format
  1206.     .DOS    DOS reserved keyword found in archive
  1207.     .ERR    Error occurred while unpacking archive (archive integrity failure)
  1208.     .CHK    Error found while file checking archive file (virus, etc.)
  1209.     .DUP    Excessive duplicate files contained in archive
  1210.     .PCK    Error occurred while repacking archive file
  1211.     .AGE    Age limit exceeded by archive file
  1212.     .ENC    Encrypted file found in archive
  1213.     .TCN    File was TCANned
  1214.     .BAD    Error found while testing GIF file
  1215.     .RES    Unacceptable GIF or JPEG resolution
  1216.     .GLT    GIF compressed with GIFLITE
  1217.     .WRK    Unable to create work space for processing file
  1218.     .MTY    Empty archive detected
  1219.  
  1220. If you feel that these files are acceptable after reviewing them, you can force
  1221. them to be accepted by using override mode, e.g.:
  1222.  
  1223.     ULP -CULP.CFG -MOVERRIDE
  1224.  
  1225. This will re-process ALL files in the source area (or the failure area, if that
  1226. is where the defective files are) and ignore the results of TCANs, duplication
  1227. and age, moving them to the destination area (if configured).  Override mode
  1228. will not override unpacking, packing, integrity and virus errors, however, for
  1229. the safety of your board and your users.  Also, override mode is of little use
  1230. if your upload areas are not utilizing a destination area.
  1231.  
  1232. If selected files need to be overridden, but not the entire set of failed
  1233. uploads, you can specify a filespec on the command line via the -F switch.  For
  1234. example:
  1235.  
  1236.     ULP -CULP.CFG -MOVERRIDE -FFILENAME.ZIP
  1237.     ULP -CULP.CFG -MOVERRIDE -F*.ARJ
  1238.  
  1239. Since override mode operates on the upload directory sets configured in ULPSM,
  1240. paths are not required or supported in the filespec passed in the -F switch for
  1241. override mode.  Any included path in the -F parameter will be ignored by ULP.
  1242.  
  1243. RETEST MODE (ULP):
  1244. ──────────────────
  1245. ULP can retest for viruses, etc. all archives found in the subdirectory passed
  1246. to it via the -F switch.  ULP will not perform any TCANning, duplication
  1247. checking or age checking, nor will it repack the archive.  It will simply
  1248. unpack and archive and file check it; this allows sysops to use newer versions
  1249. of virus scanners periodically to look for viruses that may have been missed
  1250. during the original file processing with an older revision of the virus
  1251. checker.  Some example command lines:
  1252.  
  1253.     ULP -CULP.CFG -MRETEST -FD:\PATH\
  1254.     ULP -CULP.CFG -MRETEST -FD:\PATH\*.ZIP
  1255.  
  1256. CONVERT MODE (ULP):
  1257. ───────────────────
  1258. ULP can also perform a mass conversion of the archives found in the path passed
  1259. to it to your default archiver.  ULP will retest and convert all archives found
  1260. in the subdirectory indicated using the same processing flags as new uploads.
  1261. For example:
  1262.  
  1263.     ULP -CULP.CFG -MCONVERT -FD:\PATH\
  1264.     ULP -CULP.CFG -MCONVERT -FD:\PATH\*.ARJ
  1265.  
  1266. Convert mode does not perform any description insertion or updating; it is
  1267. primarily to permit mass conversion of archives in bulk from one format to
  1268. another.
  1269.  
  1270. LOCAL MODE (ULP):
  1271. ─────────────────
  1272. When ULP performs online testing, it expects to find a door drop file and to
  1273. generate a remote display to a user over the modem.  ULP also determines at
  1274. startup whether an upload is a local upload, however this requires a drop file
  1275. as well.  By using the -L switch, you can force ULP to perform an online mode
  1276. test without a drop file:
  1277.  
  1278.     ULP -CULP.CFG -MUPLOAD -L -FD:\PATH\FILENAME.EXT
  1279.  
  1280. This mode can be used to plug ULP into another program as a single file
  1281. processor where a remote display is not required or appropriate.
  1282.  
  1283. RETAIN ORIGINAL ARCHIVE DATE (ULP):
  1284. ───────────────────────────────────
  1285. ULP normally stamps all uploads with the current date and time of processing.
  1286. If you wish to keep the original archive date, add the -R switch to the command
  1287. line:
  1288.  
  1289.     ULP -CULP.CFG -MBATCH -R
  1290.  
  1291. Note, that this doesn't affect the date inserted in the directory listing for
  1292. the upload; this affects only the file date stamp on disk.
  1293.  
  1294. NODE NUMBER (ULP):
  1295. ──────────────────
  1296. ULP normally gets the current node number from the door drop files, however
  1297. this can be overridden on the command line using the -N switch should the need
  1298. arise.  Normally this is used only for online testing modes, since the ULP
  1299. program manages node contention on its own to prevent node number duplication
  1300. and processing collisions.  An example of node number definition:
  1301.  
  1302.     ULP -CULP.CFG -MBATCH -N100
  1303.  
  1304. Use this switch only if you absolutely need to; under most circumstances it is
  1305. not required.  Note that node 0 is not an acceptable number.
  1306.  
  1307. DISABLE 16550 FIFO (ULP, DOS versions only):
  1308. ────────────────────────────────────────────
  1309. If your BBS is running on an oddball 16550-compatible serial port, such as
  1310. early Western Digital UARTs and Hayes ESPs, you may get better performance by
  1311. disabling the FIFO operation of ULP during online testing mode.  This is done
  1312. by adding the -1 switch to the command line in PCBTEST.BAT (online testing is
  1313. the only time where you might need to disable 16550 FIFOs):
  1314.  
  1315.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -1
  1316.  
  1317. HANDSHAKE METHOD (ULP, DOS versions only):
  1318. ──────────────────────────────────────────
  1319. Serial I/O requires that the ports handshake in some fashion to know when to
  1320. start and stop data transfer; two methods are commonly used, either separate or
  1321. in combination.  The most common is hardware (also referred to as RTS/CTS) and
  1322. this is the ULP startup default.  The other method, which is used primarily for
  1323. compatibility with older equipment, is software (also known as XON/XOFF).  If
  1324. you need software or both types of handshaking in your system, you can specify
  1325. it on the command line:
  1326.  
  1327.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -HSOFTWARE
  1328.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -HBOTH
  1329.  
  1330.  
  1331. ┌───────────────┐
  1332. │  12. BBS Ads  │
  1333. └───────────────┘
  1334.  
  1335. The ULP system includes a BBS ad removal feature based on CRC-32 calculation of
  1336. the file contents and other pertinent data.  In this fashion, ULP can detect a
  1337. known ad file despite changes of the file name and date.
  1338.  
  1339. In order for sysops to be able to 'keep up' with new ads produced by the weenie
  1340. sysops who insert the @!&*#%$ things, ULPSM has two maintenance functions that
  1341. permit the sysop to update the BBS ads database with their own information.
  1342.  
  1343. First, ULPSM can scan a BBS ad file (or multiple files), and update the BBS ads
  1344. database with the required information.  Don't worry about duplication within
  1345. the database, as part of the compiling process is to purge duplicate BBS ad
  1346. data.  To add files to the BBS ads database, select menu G (BBS ad processing),
  1347. and select submenu B (Add new BBS ad to BBS ads database).  The online help
  1348. contains all information that may be necessary.
  1349.  
  1350. Second, since the latest version of my master BBS ads database is always
  1351. included in the distribution archive, you don't want to keep changing your
  1352. database from release to release.  Therefore, you can merge the new release
  1353. database with your existing BBS ads database via ULPSM as well.  To merge the
  1354. distribution database with your own database, select menu G (BBS ad
  1355. processing), and select submenu C (Merge pre-built BBS ad database).  Again,
  1356. the online help contains all information that may be necessary.
  1357.  
  1358. Note that ULPSM cannot (will not) put 0-byte bbs adds in its database; this is
  1359. because every 0-byte file has the same CRC-32: 0.  Therefore, inserting 0-byte
  1360. files into a numerical database is useless and doing so would remove *every*
  1361. 0-byte file encountered, not just the BBS ads, including subdirectory markers
  1362. in pathed archives.  The exclusion filter list is the best place for 0-byte
  1363. ads, since the only thing unique to 0-byte files is the filename.
  1364.  
  1365. I would greatly appreciate your passing along any new BBS ad files that you may
  1366. collect over time to me so I can update the master database that I include with
  1367. the ULP distribution archive.  Please refer to the top of this document for my
  1368. BBS number.
  1369.  
  1370.  
  1371. ┌─────────────────────────┐
  1372. │  13. The Future of ULP  │
  1373. └─────────────────────────┘
  1374.  
  1375. ULP will be supported as long as I'm in the BBSing business (which will be
  1376. quite a while...once it's in your blood, you can never shake it <grin>).  The
  1377. ULP system will be rapidly expanding it's features so it will be your first
  1378. choice in BBS upload processors.  Some current plans (in no particular order):
  1379.  
  1380.     ∙ Add the ability to preprocess files prior to file checking them;
  1381.       for example, decompress executables that have been PKLite'd.
  1382.     ∙ Better support for other BBS software directory list formats.
  1383.  
  1384. If you have any other suggestions, or want other archivers supported, please
  1385. contact me via Email, U.S. snail-mail or on my BBS at the number at the top of
  1386. this document.
  1387.  
  1388. Thanks for giving ULP a try!
  1389.  
  1390.  
  1391. ┌────────────────────────────────┐
  1392. │  Appendix A:  DOS Errorlevels  │
  1393. └────────────────────────────────┘
  1394.  
  1395. The following is a partial list of errorlevels returned to the operating
  1396. system by the ULP and ULPSM programs.  Not all errorlevels are documented,
  1397. since the error messages are much more useful in debugging problems.
  1398.  
  1399.     0       Successful execution (ULP and ULPSM)
  1400.     1       Successful execution, nothing to do (ULP event modes)
  1401.     1       Unknown archive format (ULP online modes)
  1402.     2       DOS reserved keyword found in archive (ULP online modes)
  1403.     3       Error unpacking archive (archive integrity) (ULP online modes)
  1404.     4       Error file checking archive files (virus, etc.) (ULP online modes)
  1405.     5       Error duplicate checking archive files (ULP online modes)
  1406.     6       Error packing archive (ULP online modes)
  1407.     7       Age limit exceeded by archive files (ULP online modes)
  1408.     8       Encrypted file found in archive files (ULP online modes)
  1409.     9       TCANned file (ULP online modes)
  1410.     10      Bad GIF file (ULP online modes)
  1411.     11      Unacceptable GIF or JPEG resolution (ULP online modes)
  1412.     12      GIF compressed with GIFLITE (ULP online modes)
  1413.     13      Unable to create work space (ULP online modes)
  1414.     14      Empty archive detected (ULP online modes)
  1415.     99      Help screen (executing a program with no or an insufficient number
  1416.             of arguments)  (ULP and ULPSM)
  1417.     >99     Program error (refer to the error message and log file).
  1418.  
  1419.  
  1420. ┌────────────────────────────────┐
  1421. │  Appendix B:  Acknowlegements  │
  1422. └────────────────────────────────┘
  1423.  
  1424. The DOS versions of ULP and ULPSM use the SPAWNO swapping routines by Ralf
  1425. Brown to minimize memory use while shelling to DOS and running external
  1426. programs.
  1427.  
  1428. The Graphics Interchange Format(c) is the Copyright property of CompuServe
  1429. Incorporated.  GIF(sm) is a Service Mark property of CompuServe Incorporated.
  1430. (Standard verbage required by CompuServe)
  1431.  
  1432. The problem of automatically recognizing duplicate files on large bulletin
  1433. board systems, independent of filename, was originally solved by Dr. Frederick
  1434. W. Kantor (founder of Information Mechanics and author of FWKCS(TM)
  1435. Contents_Signature System), who came up with the elegant solution of using both
  1436. the 32_bit CRC and the uncompressed file length together to make a
  1437. "contents_signature" for each file. Dr. Kantor's experimental data has shown a
  1438. typical pairwise error rate of less than one part in ten trillion using this
  1439. technology.
  1440.  
  1441.  
  1442. ┌─────────────────────────────────────┐
  1443. │  Appendix C:  Command Line Summary  │
  1444. └─────────────────────────────────────┘
  1445.  
  1446. ULP.EXE command-line syntax:
  1447.  
  1448. ULP -Cd:\path\config.ext -Mmode [-Fd:\path\<file.ext>] [-Dd:\path\desc.ext]
  1449.    [-P#<,#>] [-B#] [-H?] [-1] [-X] [-O] [-L] [-N#] [-G?] [-R] [-T#] [-Q] [-!]
  1450.  
  1451.     -C  filename of the ULP configuration file
  1452.     -M  processing mode [Batch/Override/Retest/Convert/Upload/Test/Attach]
  1453.     -F  filename/subdirectory of the archive(s) to be tested  (conditional)
  1454.     -D  filename of the upload description file  (optional)
  1455.     COM port switches:  (optional)
  1456.     -P  COM port number [0-2/addr,irq]  -L  force local mode
  1457.     -B  DTE baud rate [300-115200]      -H  handshake [Hardware/Software/Both]
  1458.     -1  disable 16550 FIFO operation    -X  use FOSSIL driver interface
  1459.     -O  use OS/2 SIO API interface
  1460.     Miscellaneous switches:  (optional)
  1461.     -N  BBS node number                 -G  ANSI graphics toggle [Yes/No]
  1462.     -R  retain original archive date    -T  readability time delay [0-10]
  1463.     -Q  quiets beep on error            -!  enables debugging operation
  1464.  
  1465. ULPSM.EXE command-line syntax:
  1466.  
  1467.     ULPSM -Cd:\path\config.cfg [-Ad:\path\<file.ext>] [-U] [-R] [-S] [-P#] [-I]
  1468.         [-T#] [-Q]
  1469.  
  1470.     -C  complete path and filename of the configuration file
  1471.     -A  file(s) to add to the duplication database  (optional)
  1472.     -U  forces unpacking of all archives when adding files  (optional)
  1473.     -R  recurses nested drive subdirectories when adding files  (optional)
  1474.     -S  compiles, sorts and indexes the duplication database  (optional)
  1475.     -P  age in months for purging duplication database records  (optional)
  1476.     -I  initialize process data file  (optional)
  1477.     -T  sets time delay for display readability  (optional)
  1478.     -Q  quiets beep when an error is detected  (optional)
  1479.